package 基础篇.阻塞线程;

/**
 * 在A线程中调用B线程的join方法，则A线程会被阻塞直到B线程完成为止，但是其他线程并不会被B阻塞
 */
public class JoinThread extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread t1=new JoinThread();
        t1.setName("t1线程");
        //观察结果t1并没有被t2阻塞
        t1.start();
        for(int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+" "+i);
            if(i==20){
                //t2 join在主线程被调用，因此当i>20的时候t1和t2并行，但是主线程被阻塞，直到t2完成后才会被调用
                JoinThread t2=new JoinThread();
                t2.setName("t2 被join的线程");
                t2.start();
                //十秒后没完成，则不等待t2,主线程也可以加入到可运行线程调度器中
                //t2.join(10000l);
                t2.join();
            }
        }
    }
}
